package com.qinggeng.project.system.service;

import com.qinggeng.project.api.dto.DateDto;
import com.qinggeng.project.api.dto.DistributionPointDto;
import com.qinggeng.project.system.domain.DistributionConfig;
import com.qinggeng.project.system.domain.DistributionPoint;
import com.qinggeng.project.system.domain.Shop;
import com.qinggeng.project.system.domain.UserAddress;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;


/**
* @author WangKh
* @date 2019-11-15
*/
public interface DistributionConfigService {


    /**
    * 根据条件查询配送价格全部数据
    *
    * @param distributionConfig 配送价格信息
    * @return 配送价格集合信息
    */
    List<DistributionConfig> queryDistributionConfigList(DistributionConfig distributionConfig);

    /**
     * 根据配送价格ID查询信息
     *
     * @param id 操作ID
     * @return 配送价格信息
     */
    DistributionConfig findDistributionConfigById(Long id);

    /**
     * 新增保存配送价格信息
     *
     * @param  distributionConfig 配送价格信息
     * @return 结果
     */
    int createDistributionConfig(DistributionConfig distributionConfig);

    /**
     * 修改保存配送价格信息
     *
     * @param  distributionConfig 配送价格信息
     * @return 结果
     */
    int updateDistributionConfig(DistributionConfig distributionConfig);

    /**
     * 通过ID删除配送价格信息
     *
     * @param id 操作ID
     * @return 结果
     */
    int deleteDistributionConfigById(Long id);

    /**
     * 批量添加
     * @param data
     * @param regionId
     * @return
     */
    int createDistributionConfigAll(List<DistributionConfig> data, Long regionId);


    /**
     * 计算配送费
     * @param lng
     * @param lat
     * @param distance 配送距离KM
     * @param distTime
     * @return
     */
    BigDecimal calcDistPrice(Float lng, Float lat, Double distance, String distTime) throws Exception;


    /**
     * 计算时间配送费
     * @param distTime
     * @return
     * @throws Exception
     */
    BigDecimal calcDateTimePrice(Float lng, Float lat,String distTime) throws Exception;


    public List<DistributionConfig> getDistributionConfig(Float lng, Float lat) throws Exception;


    List<DateDto> getDistributionDateList(Shop shop, DistributionPoint point) throws Exception;


    /**
     * 获取配送时间
     *
     * * @return
     */
    String getDistDateTime();

    /**
     * 获取自取时间
     * @param shop
     * @param pointId
     * @return
     */
    String getPickDateTime(Shop shop, Long pointId) ;
    /**
     * 获取自取时间
     * @param shop
     * @param pointDto
     * @return
     */
    String getPickDateTime(Shop shop, DistributionPointDto pointDto) ;



    /**
     *
     * @param distance
     * @param distType
     * @return
     */
    Date getDistributionDate(Double distance,String distType);
}
